草庐IT

c++ - std::byte 的用例

全部标签

c++ - Python Ctypes 崩溃调用 C++ 函数的 C 包装器

我正在尝试使用PythonCtypes来连接已发布的(闭源)C++库。我(尝试)编写了一个基本的C风格函数包装器来构造C++vector风格对象并调用C++例程。我还(尝试)编写了一个基本的python脚本来加载共享库。除了调用C++例程的行外,一切正常:***glibcdetected***python:free():invalidnextsize(fast):0x0000000001e73c00***这是文件,不幸的是我不能分享标题,但如果需要我可以写一些类似的东西......gaumixmod.cpp:#include"nr3.h"#include"cholesky.h"#inc

c++ - 从源代码项目中提取所有功能的工具

我正在尝试构建一个可用工具列表,用于解析完整的源代码包并将所有函数/方法提取为单独的部分。我的目标是运行一个工具或脚本,立即知道包中有多少函数,并根据需要轻松地逐个检查完整的分段函数集。现在我正在使用NiCad克隆检测工具,其中包括一个用TXL(一种树转换语言)编写的提取脚本。每个函数都被提取出来并作为一个唯一的实体存储在XML文档中,因此处理函数列表非常方便。NiCad包括用于C、Java和Python的提取工具。我最关心的是C,但也很高兴有其他可用的东西。我们还没有设置C++解析器-这会很方便。我还使用了Doxygen,它具有识别调用图的额外好处。虽然这些文件中有很多标记,因此解析

c++ - 如何将包含不同语言的 wstring 行写入文件?

我从22个不同语言的文件中分离出不同的部分,并使它们成为一个wstring行,如下所示:wstringwstr_line=L"\"IDS_TOAST_ECOON\",\"ecoModeisturnedOn.\",\"ecoモードをオンにしました。\",\"Režimecojezapnutý.\",\"Økoindstillingeneraktiveret\"..."我用wofstream把wstr_line放到一个文件里,但是这行在日文部分结束了(\"ecomoードをオンニしました。\")。如果我设置wfout.imbue("chs");该行在捷克语部分结束(\"Režimecojez

c++ - 取消 pthread_cond_wait() 挂起与 PRIO_INHERIT 互斥锁

2012年4月10日更新:Fixedbylibcpatch我在pthread_cond_wait中取消线程时遇到问题,将互斥锁与PTHREAD_PRIO_INHERIT一起使用属性集。不过,这只发生在某些平台上。以下最小示例演示了这一点:(使用g++.cpp-lpthread编译)#include#includepthread_mutex_tmutex;pthread_cond_tcond;voidclean(void*arg){std::cout每次我运行它,main()卡在pthread_join().gdb回溯显示如下:Thread2(Thread0xb7d15b70(LWP25

c - C 如何计算 sin() 和其他数学函数?

我一直在仔细研究.NET反汇编和GCC源代码,但似乎无法在任何地方找到sin()和其他数学函数的实际实现...它们似乎总是引用其他东西。谁能帮我找到他们?我觉得C运行的所有硬件都不太可能支持硬件中的触发函数,所以必须有一个软件算法某处,对吧?我知道可以计算函数的几种方法,并且已经编写了自己的例程来使用泰勒级数计算函数来获得乐趣。我很好奇真实的生产语言是如何做到这一点的,因为我的所有实现总是慢几个数量级,尽管我认为我的算法非常聪明(显然它们不是)。 最佳答案 在GNUlibm中,sin的实现是系统相关的。因此,您可以在sysdeps的

c++ - 从字符串到数字大于 std::numeric_limit<double>::digits10 的 double 的转换

std::stringstr="12345679012.124678";doubleback=boost::lexical_cast(str);std::stringstr2=boost::lexical_cast(back);//herestr2isequaltostr即使数字的有效数字大于std::numeric_limit::digits10(即15),此处也没有丢失(即最终字符串=原始字符串)是否正常? 最佳答案 是的,这很正常。std::numeric_limit::digits10指的是确保强制转换无损的最大位数。这并不

c++ - OpenSSl RAND_bytes 多久返回一次错误,因为缺乏不可预测性?

RAND_bytes的文档声称如果生成的随机字节是可预测的,该函数可能会返回错误。我的问题是此类错误有多频繁?可以在有限循环(比如5次尝试)中调用RAND_bytes然后抛出异常是解决此问题的合理方法,或多或少像这样:unsignedcharrandom_bytes[4];uint8_tattempts=0;while(RAND_bytes(random_bytes,sizeof(random_bytes))!=1&&++attempts!=5){}if(attempts==5){throwstd::runtime_error("randombytestoopredictableaft

c++ - OpenSSL:AES CCM 256 位大文件加密 block :这可能吗?

我正在执行一项使用AESCCM模式(256位key长度)加密大文件的任务。其他用于加密的参数是:标签大小:8字节iv大小:12字节因为我们已经在使用OpenSSL1.0.1c,所以我也想用它来完成这项任务。文件的大小事先并不知道,它们可能非常大。这就是为什么我想按block读取它们并使用EVP_EncryptUpdate单独加密每个block,直到文件大小。不幸的是,仅当整个文件一次加密时,加密对我有效。如果我尝试多次调用它,我会从EVP_EncryptUpdate或奇怪的崩溃中得到错误。我使用gcc4.7.2在Windows7和UbuntuLinux上测试了加密。我找不到有关Open

c++ - Eclipse CDT's symbol 'X' 无法解析的通用解决方案?

我有一个包含C++和C文件的项目。代码可以正确编译和运行,但我需要消除以下错误:Symbol'ERANGE'couldnotberesolved我能够用这两个文件重现它(Ubuntu上最新的x64ElipseJuno):主要.h:#ifndefMAIN_H_#defineMAIN_H_extern"C"{#include}#endif/*MAIN_H_*/主要.cpp:#include#include#include"main.h"intmain(intargc,char*argv[]){assert(errno!=ERANGE);//在ERANGE上正确执行OpenDeclarati

c++ - 编译器如何传递 `std::initializer_list` 值? (或 : how can I get around a universal overload with one? )

Continuingmysaga,我意识到我可以使用单个std::initializer_list参数来重载我的访问函数:classarray_md{//...my_type&operator[](size_typei){/*Lotsofcode*/}my_typeconst&operator[](size_typei)const{/*sameLotsofcode,with"const"sprinkledin*/}my_type&operator[](std::initializer_listi){/*Lotsofdifferentcode*/}my_typeconst&operato